<!DOCTYPE html>
<html>
<head>
	<title></title>
	<link rel="stylesheet" type="text/css" href="../公用CSS文件/all.css" />
	<script type="text/javascript" src="../js/jquery.min.js"></script> 	<script type="text/javascript" src="../js/js.js"></script>
	<meta charset="utf-8">
	<style type="text/css">
		table{min-width:80%}
	</style>
</head>
<body>

<div class="dt">函数的概念和说明</div>
<ul>
	<table>
		<tr>
			<th>函数</th><th>说明</th>
		</tr>
		<tr>
			<td>概念</td><td>函数是被命名的独立的代码段，调用时执行特定任务，并可能给调用它的程序返回一个值</td>
		</tr>
		<tr>
			<td>作用和意义</td>
			<td>提高程序的重用性、可维护性、开发效率、可靠性，控制程序的复杂性</td>
		</tr>
		<tr>
			<td>组成</td><td>函数名、参数、函数体、返回语句</td>
		</tr>
	</table>
	<li>模块化的程序设计是通过函数和对象实现的</li>
</ul>

<div class="dt">函数的定义</div>
<ul>
	
</ul>

<div class="dt">函数的参数</div>
<ul>
    <div class="ltable showimg">函数参数相关概念</div>
	<table class="img">
		<tr>
			<th>概念</th><th>说明</th>
		</tr>
		<tr>
			<td>函数参数</td><td>函数参数参数分为两种：声明函数时函数名右边圆括号内的用逗号分隔的一个个变量称为形式参数，调用函数时该位置填进去的数据称为实际参数</td>
		</tr>
	</table>

	<div class="ltable showimg">函数参数约束</div>
	<div class="img">
		<table>
			<tr>
				<th>约束符</th><th>意义</th>
			</tr>
			<tr>
				<td>int</td><td>约束为int类型数据</td>
			</tr>
			<tr>
				<td>array</td><td>约束为数组类型数据</td>
			</tr>
			<tr>
				<td>callback</td><td>约束为可回调的函数</td>
			</tr>
			<tr>
				<td>类名</td><td>约束为类的实例</td>
			</tr>
		</table>
		<li>函数参数约束能约束参数的类型为任意数据类型、类的实例、函数</li>
        <li>在php中，函数的非八种数据类型的参数，都可以以字符串形式传递，所以callback约束既可以传递一个声明的函数的函数名，也可以直接传递一个匿名函数声明表达式</li>
		<li>约束实某个类的实例，其实也可以是其子类的实例</li>
	</div>

	<div class="ltable showimg">函数参数连接运算符</div>
	<div class="img">
		<table>
			<tr>
				<th>概念和使用</th><th>说明</th>
			</tr>
			<tr>
				<td>连接运算符</td>
				<td>PHP5.6引入的一种'...'符号，用于更方便的变长函数参数，同时也能在传参中使用，传入不定个数的参数</td>
			</tr>
			<tr>
				<td>在形式参数中使用</td>
				<td>在最后一个参数前标识...，标示该位置能传入不限个数个参数，调用时在函数内部，该值被组合成数组</td>
			</tr>
			<tr>
				<td>在实际参数中使用</td>
				<td>在传入参数时在参数值前标识...，会遍历该值，逐个元素传入</td>
			</tr>
		</table>
	</div>
</ul>

<div class="dt">Closure类</div>
<ul>
	<div class="ltable showimg">Closure说明</div>
	<div class="img">
		<li>PHP 5.3 引入一种新的机制，所有匿名函数声明时，默认都是Closure类的实例，并继承Closure类的bind和bindTo方法，以便在匿名函数内部直接关联某个类的实例或命名空间</li>
	</div>

	<div class="ltable showimg">Closure类方法</div>
	<div class="img">
		<table>
			<tr>
				<th>方法</th>
				<th>作用</th>
				<th>参数</th>
				<th>返回值</th>
			</tr>
			<tr>
				<td>bind</td>
				<td>将匿名函数内部的$this、static绑定某个类的实例或者类本身</td>
				<td>Closure匿名函数 object要绑定的对象 【要绑定的类】</td>
				<td>Closure匿名函数</td>
			</tr>
			<tr>
				<td>bindTo</td>
				<td>bind的非静态版本，使用匿名函数即Closure实例访问时少指定原来的第一参数（至少性能有所提升）</td>
				<td>object要绑定的对象 【要绑定的类】</td>
				<td>Closure匿名函数</td>
			</tr>
		</table>
		<li>bindTo和bind，会返回新的匿名函数，其内部$this绑定指定的对象，static绑定指定的类，但其本身不会改变</li>
		<li>Closure类其实还有一个隐藏的__invoke魔术方法，匿名函数被调用时隐式地执行了该Closure实例的__invoke方法</li>
	</div>
</ul>



</body>
</html>